package com.liruo.learn.spring.mvc.enumconverter;

import org.springframework.core.convert.converter.Converter;

/**
 * @Author:liruo
 * @Date:2023-02-19-13:46:59
 * @Desc
 * 注意传参是class要对应Converter的第二个泛型，这个实在没办法用泛型规范
 * 必须指定什么类型由什么类型来转换 即不能泛型化--参数化
 */
public class StrToEnumConverter <T extends SourceEnum<String>> implements Converter<String, T> {
    private final Class<T> enumClazz;

    public StrToEnumConverter(Class<T> enumClazz) {
        this.enumClazz = enumClazz;
    }
    @Override
    public T convert(String source) {
        for (T enumeration : enumClazz.getEnumConstants()){
            if(enumeration.getSource().equals(source)){
                return enumeration;
            }
        }
        throw new IllegalArgumentException("has not the enumeration source[class=" +
                String.class.getName() + "] value=" + source);
    }
}
